#ifndef BUBBLESORT_H
#define BUBBLESORT_H

#include "sortalgorithm.h"

// 冒泡排序算法类，继承自 SortAlgorithm 抽象基类
class BubbleSort : public SortAlgorithm {
public:
    // 构造函数，接收初始数据并初始化
    BubbleSort(const QVector<int> &values);

    // 执行一次排序操作
    void step() override;

    // 判断排序是否完成
    bool isFinished() const override;

    // 获取当前排序状态的数据（包含颜色信息）
    const QVector<SortBar>& getData() const override;

    // 获取并重置比较次数
    int getAndResetCompareCount() override;

    // 获取并重置交换次数
    int getAndResetSwapCount() override;

    // 获取算法的时间和空间复杂度说明
    QString getComplexityInfo() const override;

    // 设置排序方式（升序或降序）
    void setOrder(SortOrder order) override;

private:
    QVector<SortBar> bars;        // 可视化用的排序元素数组，每个元素包含值和颜色
    int i = 0;                    // 外层循环索引
    int j = 0;                    // 内层循环索引
    bool sorted = false;         // 是否已排序完成标志
    int compareCount = 0;        // 本轮比较次数
    int swapCount = 0;           // 本轮交换次数
    SortOrder sortOrder = SortOrder::Ascending;  // 当前排序方向（默认升序）
};

#endif // BUBBLESORT_H
